﻿using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.Data;
using System.Data.Common;

namespace QLHPHP
{
    /// <summary>
    /// Class về các ngành trong trường
    /// </summary>
    public static class Nganh
    {
        /// <summary>
        /// Lay danh sach nganh theo khoa
        /// </summary>
        /// <param name="MaKhoa"></param>
        /// <returns></returns>
        public static DataTable LayTatCaNganh()
        {
            DbCommand comm = DataAccess.CreateCommand();
            comm.CommandText = "GetAllBranch";
            return DataAccess.ExecuteSelectCommand(comm);
        }

        /// <summary>
        /// Lay danh sach nganh theo khoa
        /// </summary>
        /// <param name="MaKhoa"></param>
        /// <returns></returns>
        public static DataTable LayNganhTheoKhoa(string MaKhoa)
        {
            DbCommand comm = DataAccess.CreateCommand();
            comm.CommandText = "GetBranch";

            DbParameter param = comm.CreateParameter();
            param.ParameterName = "@MaKhoa";
            param.DbType = DbType.String;
            param.Value = MaKhoa;
            comm.Parameters.Add(param);
            return DataAccess.ExecuteSelectCommand(comm);
        }

        /// <summary>
        /// Lay danh sach nganh theo MaMonHoc
        /// </summary>
        /// <param name="MaKhoa"></param>
        /// <returns></returns>

        public static DataTable LayNganhTheoMaMonHoc(string MaMonHoc)
        {
            DbCommand comm = DataAccess.CreateCommand();
            comm.CommandText = "GetBranchByIdSubject";

            DbParameter param = comm.CreateParameter();
            param.ParameterName = "@mamonhoc";
            param.DbType = DbType.String;
            param.Value = MaMonHoc;
            comm.Parameters.Add(param);

            return DataAccess.ExecuteSelectCommand(comm);
        }
        /// <summary>
        /// Cap Nhat chi tiet nganh
        /// </summary>
        /// <param name="MaKhoa"></param>
        /// <returns></returns>
        public static bool CapNhatChiTietNganh(string MaNganh, string MaMonHoc, string MaHKNH)
        {
            DbCommand comm = DataAccess.CreateCommand();
            comm.CommandText = "UpdateBranchDetail";

            DbParameter param = comm.CreateParameter();
            param.ParameterName = "@MaNganh";
            param.DbType = DbType.String;
            param.Value = MaNganh;
            comm.Parameters.Add(param);

            param = comm.CreateParameter();
            param.ParameterName = "@MaMonHoc";
            param.DbType = DbType.String;
            param.Value = MaMonHoc;
            comm.Parameters.Add(param);

            param = comm.CreateParameter();
            param.ParameterName = "@MaHKNH";
            param.DbType = DbType.String;
            param.Value = MaHKNH;
            comm.Parameters.Add(param);

            int result = DataAccess.ExecuteNonQuery(comm);
            return (result != 1);
        }

        /// <summary>
        /// Cap nhat thong tin nganh 
        /// </summary>
        /// <param name="brachId">Thong tin nganh can update</param>
        /// <param name="brachName">Ten nganh can update</param>
        /// <param name="departmentId">Ma khoa chua nganh update</param>
        /// <returns></returns>
        public static bool CapNhatNganh(string MaNganh, string TenNganh, string MaKhoa)
        {
            DbCommand comm = DataAccess.CreateCommand();
            comm.CommandText = "UpdateBranch";

            DbParameter param = comm.CreateParameter();
            param.ParameterName = "@MaNganh";
            param.DbType = DbType.String;
            param.Value = MaNganh;
            comm.Parameters.Add(param);

            param = comm.CreateParameter();
            param.ParameterName = "@TenNganh";
            param.DbType = DbType.String;
            param.Value = TenNganh;
            comm.Parameters.Add(param);

            param = comm.CreateParameter();
            param.ParameterName = "@MaKhoa";
            param.DbType = DbType.String;
            param.Value = MaKhoa;
            comm.Parameters.Add(param);

            int result = DataAccess.ExecuteNonQuery(comm);
            return (result != -1);
        }

        /// <summary>
        /// Them nganh moi vao 1 khoa nhat dinh
        /// </summary>
        /// <param name="brachId">Thong tin nganh can update</param>
        /// <param name="brachName">Ten nganh can update</param>
        /// <param name="MaKhoa">Ma khoa chua nganh update</param>
        /// <returns></returns>
        public static bool ThemNganh(string MaNganh, string TenNganh, string MaKhoa)
        {
            DbCommand comm = DataAccess.CreateCommand();
            comm.CommandText = "CreateBranch";

            DbParameter param = comm.CreateParameter();
            param.ParameterName = "@MaNganh";
            param.DbType = DbType.String;
            param.Value = MaNganh;
            comm.Parameters.Add(param);

            param = comm.CreateParameter();
            param.ParameterName = "@TenNganh";
            param.DbType = DbType.String;
            param.Value = TenNganh;
            comm.Parameters.Add(param);

            param = comm.CreateParameter();
            param.ParameterName = "@MaKhoa";
            param.DbType = DbType.String;
            param.Value = MaKhoa;
            comm.Parameters.Add(param);

            int result = DataAccess.ExecuteNonQuery(comm);
            return (result != -1);
        }

        /// <summary>
        /// Xoa nganh khoi danh sach nganh cua 1 khoa
        /// </summary>
        /// <param name="MaNganh">Ma nganh can xoa</param>
        /// <returns></returns>
        public static bool XoaNganh(string MaNganh)
        {
            DbCommand comm = DataAccess.CreateCommand();
            comm.CommandText = "DeleteBrach";

            DbParameter param = comm.CreateParameter();
            param.ParameterName = "@MaNganh";
            param.DbType = DbType.String;
            param.Value = MaNganh;
            comm.Parameters.Add(param);

            int result = DataAccess.ExecuteNonQuery(comm);
            return (result != -1);
        }

        /// <summary>
        /// Kiểm tra xem ngành học có chứa môn học nào hay chưa?
        /// </summary>
        /// <param name="branchId">Mã ngành học</param>
        /// <returns>Đúng nếu ngành học có chứa môn học</returns>
        public static bool KTNganhChuaMonHoc(string branchId)
        {
            DbCommand comm = DataAccess.CreateCommand();
            comm.CommandText = "CheckBranchContainsSubject";

            DbParameter param = comm.CreateParameter();
            param.ParameterName = "@MaNganh";
            param.DbType = DbType.String;
            param.Value = branchId;
            comm.Parameters.Add(param);

            param = comm.CreateParameter();
            param.ParameterName = "@Tontai";
            param.DbType = DbType.Boolean;
            param.Direction = ParameterDirection.Output;
            comm.Parameters.Add(param);

            int result = DataAccess.ExecuteNonQuery(comm);
            bool check = (bool)comm.Parameters["@TonTai"].Value;
            return check;
        }

        /// <summary>
        /// Kiểm tra xem mã ngành, hay tên ngành đã tồn tại hay chưa
        /// </summary>
        /// <param name="branchId">Mã ngành kiểm tra</param>
        /// <param name="branchName">Tên ngành </param>
        /// <returns>1-Nếu mã ngành đã tồn tại 2-Nếu tên ngành đã tồn tại 0-Nếu tên ngành không tồn tại</returns>
        public static int KTNganhCoTonTai(string branchId, string branchName)
        {
            DbCommand comm = DataAccess.CreateCommand();
            comm.CommandText = "CheckBranchExist";

            DbParameter param = comm.CreateParameter();
            param.ParameterName = "@MaNganh";
            param.DbType = DbType.String;
            param.Value = branchId;
            comm.Parameters.Add(param);


            param = comm.CreateParameter();
            param.ParameterName = "@TenNganh";
            param.DbType = DbType.String;
            param.Value = branchName;
            comm.Parameters.Add(param);

            param = comm.CreateParameter();
            param.ParameterName = "@Tontai";
            param.DbType = DbType.Boolean;
            param.Direction = ParameterDirection.Output;
            comm.Parameters.Add(param);

            DataAccess.ExecuteNonQuery(comm);
            int check = (int)comm.Parameters["@TonTai"].Value;
            return check;
        }
    }
}
